package DataStructure.QueueLearning.BlockingQueue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 *  阻塞队列 -- 阻塞和超时方法的区别
 *      阻塞方法 -- put(e) 和 take() 如果队列已满则线程会一直卡在方法处等待队列有空位
 *      超时方法 -- offer(e,time,unit) 和 poll(time,unit) 如果队列已满且超过指定时间，会跳过方法
 *                 但是如果队列可用，则不会等待，会马上执行
 */
public class Demo {
    public static void main(String[] args) throws InterruptedException {
        ArrayBlockingQueue<String> bq = new ArrayBlockingQueue<String>(2);
        //bq.offer("a");
        //System.out.println(bq.offer("b"));
        //System.out.println(bq.offer("c"));

        //bq.put("a");
        //bq.take();
        //System.out.println(bq);
        //bq.take();
        ////bq.put("b");
        ////bq.put("b");
        //System.out.println(bq);


        bq.offer("a", 3000, TimeUnit.MILLISECONDS);
        System.out.println(bq);
        bq.offer("b", 3000, TimeUnit.MILLISECONDS);
        System.out.println(bq);
        System.out.println(bq.offer("c", 3000, TimeUnit.MILLISECONDS));
        System.out.println(bq);
    }
}
